/*
 * vendedores_service.cpp
 *
 */

#include "../../IPC/MessageQueue.h"
#include "../logger/logger.h"
#include "../../common/StringUtils.h"
#include "../../middleware/CommunicationVendedor.h"
#include "../capa_servicios_distribuidos/QueueLauncher.h"
#include "../channel_common/agent_address_service/AgentAddressService.h"

int main(int argc, char**argv)
{
	std::string hostName = "vendedores_libres_service_pc";

	int pedidoVendedorLibreId = channel::AgentAddressService::registerNameStatic("vendedores_libres_service_req");
	int informarVendedorLibreId = channel::AgentAddressService::registerNameStatic("informar_vendedores_libres_service");

	ipc::MessageQueue<middleware::CommunicationVendedor::AvailableVendedorStruct>
		 availableVendedorQueue(ipc::MessageQueue<middleware::CommunicationVendedor::AvailableVendedorStruct>::get
			(IPCUids::getFile(middleware::CommunicationVendedor::UIDVendedorAvailable)+hostName,
			 IPCUids::getKey(middleware::CommunicationVendedor::UIDVendedorAvailable)));

	ipc::MessageQueue<middleware::CommunicationVendedor::VendedorReplyStruct>
	replyQueue(ipc::MessageQueue<middleware::CommunicationVendedor::VendedorReplyStruct>::get
			(IPCUids::getFile(middleware::CommunicationVendedor::UIDVendedorReply)+hostName,
			 IPCUids::getKey(middleware::CommunicationVendedor::UIDVendedorReply)));

	CLogger::create("Servicio vendedores libres");
	CLogger::setLevel(LogLevelEnum::TRACE);

	middleware::CommunicationVendedor::AvailableVendedorStruct vendedorRequest;
	middleware::CommunicationVendedor::AvailableVendedorStruct vendedorLibre;
	middleware::CommunicationVendedor::VendedorReplyStruct vendedorReply;

	CLogger::log("Iniciado",LogLevelEnum::INFO);

	while(true)
	{
		vendedorRequest = availableVendedorQueue.get(pedidoVendedorLibreId);

		CLogger::log("Se recibio un pedido de vendedor libre de cliente:"
				+StringUtils::NumberToString(vendedorRequest.clientId),
				LogLevelEnum::DEBUG);

		vendedorLibre = availableVendedorQueue.get(informarVendedorLibreId);

		vendedorReply.vendedorId = vendedorLibre.vendedorId;

		CLogger::log("Se obtuvo el vendedor:"
				+StringUtils::NumberToString(vendedorReply.vendedorId),
				LogLevelEnum::DEBUG);

		replyQueue.put(vendedorRequest.clientId,vendedorReply);
	}
}

